package pl.marekbar.czynnosc;

import net.londatiga.android.ActionItem;
import net.londatiga.android.QuickAction;
import pl.marekbar.R;
import android.app.ActionBar;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView.AdapterContextMenuInfo;
import pl.marekbar.Aplikacja;
import pl.marekbar.Powiadomienie;
import pl.marekbar.Pytanie;
import pl.marekbar.Gesty;
import pl.marekbar.Komunikat;
import pl.marekbar.Gesty.GestySluchacz;
import pl.marekbar.baza.Krolik;
import pl.marekbar.widoki.ListaKrolikow;

/**
 * Główny ekran aplikcacji.
 * 
 * @author marekbar1985
 * 
 */

public class EkranGlowny extends ListActivity implements GestySluchacz
{
	private Gesty detektor = null;
	private static final int FILTR_SAMICE = 1;
	private static final int FILTR_SAMCE = 2;
	private static final int FILTR_MLODE = 3;
	private static final int FILTR_STARE = 4;
	private static final int FILTR_DO_SZCZEPIENIA = 5;
	private static final int FILTR_OSTATNIO_KUPIONE = 6;
	private QuickAction menuFiltrowania;
	private static int idKrolika;
	private static int pozycjaNaLiscie;
	private static Krolik krolik;
	private ListaKrolikow adapter;


	public void inicjuj()
	{
		Aplikacja.ustawKontekst(getApplicationContext());

		adapter = new ListaKrolikow(EkranGlowny.this,Krolik.pobierzKroliki(this));
		setListAdapter(adapter);

		if (detektor == null)
		{
			detektor = new Gesty(this, this);
		}
	}



	public void onCreate(Bundle paczka)
	{
		super.onCreate(paczka);

		this.inicjuj();
		ActionBar pasekNawigacji = getActionBar();
		pasekNawigacji.setDisplayHomeAsUpEnabled(true);
		pasekNawigacji.setDisplayShowTitleEnabled(false);
		registerForContextMenu(getListView());
		menuFiltrowania = new QuickAction(this, QuickAction.VERTICAL);
		this.utworzMenuFiltrowania();
		getListView().setBackgroundColor(getResources().getColor(R.color.combo132Granat));
	}



	public void onStart()
	{
		super.onStart();
	}



	public void onRestart()
	{
		super.onRestart();
		this.inicjuj();
	}



	public void onResume()
	{
		super.onResume();
	}



	public void onPause()
	{
		super.onPause();
	}



	public void onStop()
	{
		super.onStop();
	}



	public void onDestroy()
	{
		super.onDestroy();
	}



	@Override
	public boolean dispatchTouchEvent(MotionEvent zdarzenie)
	{
		this.detektor.onTouchEvent(zdarzenie);
		return super.dispatchTouchEvent(zdarzenie);
	}



	@Override
	public void onPrzesuniecie(int kierunek)
	{
		switch (kierunek)
		{
			case Gesty.PRZESUNIECIE_W_LEWO:
			{
				pokaz(EkranDodaj.class);
			}
				break;
			case Gesty.PRZESUNIECIE_W_PRAWO:
			{
				pokaz(EkranFiltrListy.class);
			}
				break;
		}
	}



	@Override
	public void onPodwojneDotkniecie()
	{
		
	}



	private void pokaz(Class<?> czynnosc)
	{
		Intent zamiar = new Intent(EkranGlowny.this, czynnosc);
		startActivity(zamiar);
	}



	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		MenuInflater maperMenu = getMenuInflater();
		maperMenu.inflate(R.menu.ekran_glowny, menu);
		return true;
	}



	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		switch (item.getItemId())
		{
			case android.R.id.home:
			{

			}
				return true;
			case R.id.menu_eg_dodaj:
			{
				pokaz(EkranDodaj.class);
			}
				return true;
			case R.id.menu_eg_kamera:
			{
				Powiadomienie.powiadomienie(EkranGlowny.this, EkranGlowny.class,"Rabbit", "A kiedy spotkam zwykłym przypadkiem Zrozumiem, że już dla mnie są i kiedy Nie spojrzę nagle ukradkiem Wtedy zabłysną na niebie wysokim Tysiącem gwiazd Lecz żadna przy Tobie nie ma szans");
			}
				return true;
			case R.id.menu_eg_szukaj:
			{

			}
				return true;
			case R.id.menu_eg_ustawienia:
			{
				pokaz(EkranUstawienia.class);
			}
				return true;
			case R.id.menu_eg_filtruj:
			{
				menuFiltrowania.show(findViewById(R.id.menu_eg_filtruj));
			}
				return true;
			default:
				return super.onOptionsItemSelected(item);
		}
	}



	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo)
	{
		super.onCreateContextMenu(menu, v, menuInfo);
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.ekran_glowny_menu_kontekstowe, menu);
	}



	@Override
	public boolean onContextItemSelected(MenuItem item)
	{
		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
				.getMenuInfo();
		pozycjaNaLiscie = (int)getListAdapter().getItemId(info.position);
		krolik = ((Krolik) getListAdapter().getItem(pozycjaNaLiscie));
		idKrolika = krolik.pobierzId();
		
		switch (item.getItemId())
		{
			case R.id.menu_egk_galeria:
			{
				this.pokaz(idKrolika, EkranGaleria.class);
			}
				return true;
			case R.id.menu_egk_podglad:
			{
				this.pokaz(idKrolika, EkranPodglad.class);
			}
				return true;
			case R.id.menu_egk_edycja:
			{
				this.pokaz(idKrolika, EkranEdycja.class);
			}
				return true;
			case R.id.menu_egk_usun:
			{
				Pytanie.prostyTakNie(EkranGlowny.this, "Usuwanie królika",
						"Czy usunąć tego królika?",
						new Dialog.OnClickListener()
						{

							@Override
							public void onClick(DialogInterface dialog,
									int which)
							{
								if (Krolik.usun(EkranGlowny.this, idKrolika))
								{
									adapter = new ListaKrolikow(EkranGlowny.this,Krolik.pobierzKroliki(EkranGlowny.this));
									setListAdapter(adapter);
									Powiadomienie.wyslij(EkranGlowny.this, EkranGlowny.class, "Usunięto królika: " + krolik.pobierzNazwa() + " z pamięci aplikacji.");
									idKrolika = -1;
									pozycjaNaLiscie = -1;
								}
							}
						}, new Dialog.OnClickListener()
						{

							@Override
							public void onClick(DialogInterface dialog,
									int which)
							{

							}
						});
			}
				return true;
			default:
				return super.onContextItemSelected(item);
		}
	}



	private void pokaz(int id, Class<?> czynnosc)
	{
		Intent zamiar = new Intent(EkranGlowny.this, czynnosc);
		zamiar.putExtra("id", id);
		startActivity(zamiar);
	}



	private void utworzMenuFiltrowania()
	{
		menuFiltrowania.addActionItem(new ActionItem(FILTR_SAMICE, "Samice",
				getResources().getDrawable(R.drawable.female)));
		menuFiltrowania.addActionItem(new ActionItem(FILTR_SAMICE, "Samce",
				getResources().getDrawable(R.drawable.male)));
		menuFiltrowania.addActionItem(new ActionItem(FILTR_MLODE, "Młode",
				getResources().getDrawable(R.drawable.mlode)));
		menuFiltrowania.addActionItem(new ActionItem(FILTR_STARE, "Stare",
				getResources().getDrawable(R.drawable.stare)));
		menuFiltrowania.addActionItem(new ActionItem(FILTR_DO_SZCZEPIENIA,
				"Do zaszczepienia", getResources().getDrawable(
						R.drawable.szczepienie)));
		menuFiltrowania.addActionItem(new ActionItem(FILTR_OSTATNIO_KUPIONE,
				"Ostatnio kupione", getResources().getDrawable(
						R.drawable.kupione)));

		menuFiltrowania
				.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener()
				{
					@Override
					public void onItemClick(QuickAction source, int pos,
							int actionId)
					{
						ActionItem actionItem = menuFiltrowania
								.getActionItem(pos);
						switch (actionId)
						{
							case FILTR_SAMICE:
							{
								Komunikat.alert(EkranGlowny.this,
										actionItem.getTitle());
							}
								break;
							case FILTR_SAMCE:
							{
								Komunikat.alert(EkranGlowny.this,
										actionItem.getTitle());
							}
								break;
							case FILTR_MLODE:
							{
								Komunikat.alert(EkranGlowny.this,
										actionItem.getTitle());
							}
								break;
							case FILTR_STARE:
							{
								Komunikat.alert(EkranGlowny.this,
										actionItem.getTitle());
							}
								break;
							case FILTR_DO_SZCZEPIENIA:
							{
								Komunikat.alert(EkranGlowny.this,
										actionItem.getTitle());
							}
								break;
							case FILTR_OSTATNIO_KUPIONE:
							{
								Komunikat.alert(EkranGlowny.this,
										actionItem.getTitle());
							}
								break;
						}

					}
				});

	}

}
